package xyz.xmh.pattern.creational.singletonpattern;

/**
 * EnumSingleton
 * 枚举单例
 * 实现单例模式的最佳方案，支持多线程，序列化
 * 单元素的枚举类型已经成为实现Singleton的最佳方法。 —— 《Effective Java》作者
 *
 * @author xuMingHai
 * @since 2021/4/28 星期三 18:03
 */
public enum EnumSingleton {
    /**
     * 这个枚举的实例化对象，static final修饰的，<br/>
     * 因为是static final修饰，实例化之后不会改变，所以在指挥调用一次构造函数，需要实例化的类只会创建一次
     */
    INSTANCE;

    private final Resource resource;

    /**
     * 枚举的构造函数只能是私有的
     */
    EnumSingleton() {
        resource = new Resource();
    }

    /**
     * 获取实例对象
     *
     * @return 实例对象
     */
    public Resource getInstance() {
        return resource;
    }

    /**
     * 需要实例化的单例内部类
     */
    public static class Resource {

        private Resource() {
        }

        public void showMessage() {
            System.out.println("Hello EnumSingleton!");
        }

    }

}

